/* 
 * File:   Escenario.h
 * Author: 75.02 - Grupo 7, 2do cuatrimestre 2012.
 *
 * Created on 31 de octubre de 2012, 18:47
 */

#ifndef ESCENARIO_H
#define	ESCENARIO_H

#include <vector>

#include "Actor.h"
#include "Posicion.h"
#include "Vector2D.h"
#include "Utilidad.h"
#include "Perimetro.h"
#include "ISerializable.h"
#include "InfoMovimiento.h"

using namespace std;
using namespace TP::Serializacion;
using namespace TP::Matematica;
using namespace TP::Juego::Arena;
using namespace TP::Juego::Arena::Utilidades;
using namespace TP::Juego::Arena::Actores;
using namespace TP::Juego::Motorizacion::Fisica;
using namespace TP::Juego::Motorizacion::Generadores;

namespace TP { namespace Juego { namespace Arena {

class Escenario: public ISerializable {
public:
    
    Escenario();

    /* @todo: cuando modifico con el diseñador parametros como la altura o anchura
     * de un escenario que ya esta instanciado, y pongo "Guardar":
     * o hago metodos setNuevaAltura y setNuevaAnchura, o desde nivel borro
     * el escenario y lo hago de vuelta (me parece mejor la segunda opcion) 
     */
    Escenario(unsigned pAlto, unsigned pAncho, const string &rutaImagenFondo);

    ~Escenario();
    
    Actor* addActor (Actor* pActor, Posicion* pPosicion, Vector2D* pVelocidad, Vector2D* pAceleracion);
    
    Actor* getActorPorNombre (const string& pNombreActor);
    
    vector<Actor*>& getActores();
    
    Utilidad* addUtilidad (Utilidad* pUtilidad, Posicion* pPosicion);
    
    vector<Utilidad*>& getUtilidades ();
    
    Perimetro* getPerimetro();
    
    void liberar();
    
    const string& getRutaImagenFondo() const;
    
    vector<struct InfoMov*>& getSemillasGeneradorPajaritos ();
    
    struct InfoMov* setSemillaGeneradorPajaritos(struct InfoMov* pSemilla);

    virtual string aXML();
    
    virtual string aXML(const string& pPath);
    
    virtual void parseXML (const string& pDescriptor);
    
    virtual TiXmlElement* aElementoXML ();
    
    virtual void deElementoXML (TiXmlElement* pElemento);
    
private:
    vector<Actor*> _actores;
    vector<Utilidad*> _utilidades;
    Perimetro* _perimetro;
    string _ruta_image_fondo;
    vector<struct InfoMov*> _semillasGeneradorPajaritos;
    
};

}}}

#endif	/* ESCENARIO_H */

